package routers

import (
	"webx/config"
	"webx/controllers"
	_ "webx/docs"
	"webx/middleware"
	"webx/models/dao"
	"webx/services"
	"webx/utils"

	"github.com/gin-gonic/gin"
	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
)

func SetupRouter() *gin.Engine {
	// 设置 Gin 模式
	if config.IsProd() {
		gin.SetMode(gin.ReleaseMode)
	} else {
		gin.SetMode(gin.DebugMode)
	}

	r := gin.New()

	// 中间件
	r.Use(middleware.CorsMiddleware())
	r.Use(utils.LoggerMiddleware())
	r.Use(gin.Recovery())

	// 数据库初始化
	if err := dao.InitDB(); err != nil {
		panic(err)
	}

	if err := dao.InitRedis(); err != nil {
		panic(err)
	}

	// 服务层初始化
	userService := services.NewUserService(dao.GetDB())

	// 控制器初始化
	userController := controllers.NewUserController(userService)

	// 路由分组
	api := r.Group("/api")
	{
		// 用户路由
		users := api.Group("/users")
		{
			users.GET("", userController.ListUsers)
			users.POST("", userController.CreateUser)
			users.GET("/:id", userController.GetUserByID)
			users.PUT("/:id", userController.UpdateUser)
			users.DELETE("/:id", userController.DeleteUser)
		}

		// 认证路由
		auth := api.Group("/auth")
		{
			auth.POST("/login", func(c *gin.Context) {
				// 登录逻辑
			})
			auth.POST("/register", func(c *gin.Context) {
				// 注册逻辑
			})
		}
	}

	// 健康检查
	r.GET("/health", func(c *gin.Context) {
		c.JSON(200, gin.H{"status": "ok"})
	})

	// Swagger 文档
	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))

	return r
}
